// 进行axios二次封装：使用请求与响应拦截器
import axios from 'axios'
import { ElMessage } from 'element-plus'
import { GET_TOKEN } from './token'
// // 引入userStore获取token
// import useUserStore  from '@/store/modules/user.ts'
// 1.利用axios对象的create方法去创建axios实例(其他配置：基础路径，超时时间)
const request = axios.create({
  // 基础路径
  baseURL: import.meta.env.VITE_APP_BASE_API, // 基础路径上会携带/api
  timeout: 5000, // 超时时间的设置
})
// console.log(request) // axios
// 2.为request实例添加请求拦截器(对请求参数进行处理)
request.interceptors.request.use((config) => {
  // const userStore = useUserStore()
  if (GET_TOKEN()) {
    config.headers.token = GET_TOKEN()
  } // 设置一些公共参数token
  return config // 一定要返回config配置对象
  // config配置对象里面有一个属性很重要headers请求头,经常给服务器端携带公共参数
})
// 3.为request实例添加响应拦截器(对返回数据进行处理)
request.interceptors.response.use(
  // 成功的回调  response.status 2xx
  (response) => {
    // console.log(response);// response:请求返回的数据
    return response.data // 简化返回的数据
  },
  // 失败的回调 处理http网络的错误
  (error) => {
    // console.log(error) // AxiosError {message: 'Network Error', name: 'AxiosError', code: 'ERR_NETWORK', config: {…}, request: XMLHttpRequest, …}
    // 使用ElMessage UI插件提示的错误信息
    ElMessage({
      type: 'error',
      message: error.message, // 返回的信息中没有status属性
    })
    // 返回一个失败的Promise对象终结状态
    return Promise.reject(error)
  },
)

// 对外暴露封装好的axios(request)
export default request
